package vista.ventanas;

import vista.paneles.ElementoNoExistenteException;
import vista.paneles.NingunElementoSeleccionadoException;
import vista.paneles.PanelParLabelCombo;
import vista.paneles.PanelParLabelText;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.util.List;

import logica.Entidad;
import logica.EntidadRol;

@SuppressWarnings("serial")
public class VentanaEntidadRol extends SubVentana {

	PanelParLabelCombo entidades;
	PanelParLabelText rol;
	PanelParLabelText cardMin;
	PanelParLabelText cardMax;
	
	EntidadRol entidadRolEditada;
	
	public VentanaEntidadRol(VentanaRelacion ventanaPadre, List<Entidad> entidadesExistentes) 
	{
		super(ventanaPadre, "Rol de la Entidad", 300);
		
		entidades.setDatosCombo(entidadesExistentes);
		entidadRolEditada = null;
	}

	public VentanaEntidadRol(VentanaRelacion ventanaPadre, List<Entidad> entidadesExistentes, EntidadRol entidadRolAEditar) throws ElementoNoExistenteException 
	{
		super(ventanaPadre, "Rol de la Entidad", 300);
		
		entidades.setDatosCombo(entidadesExistentes);
		this.entidadRolEditada = entidadRolAEditar;
		
		this.cardMin.setInformacion(this.entidadRolEditada.getCardinalidadMinString());
		this.cardMax.setInformacion(this.entidadRolEditada.getCardinalidadMaxString());
		
		this.rol.setInformacion(this.entidadRolEditada.getRol());
		this.entidades.seleccionarDato(this.entidadRolEditada.getEntidad());		
	}

	public EntidadRol getEntidadRol() throws NumberFormatException, NingunElementoSeleccionadoException
	{
		EntidadRol entidadRol;
		
		try
		{
			if (this.entidadRolEditada == null)
				entidadRol = new EntidadRol((Entidad)this.entidades.getDatoSeleccionado());
			else
			{
				entidadRol = this.entidadRolEditada;
				entidadRol.setEntidad((Entidad)this.entidades.getDatoSeleccionado());
			}
			
			entidadRol.setRol(this.rol.getInformacion());
			entidadRol.setCardinalidadMin(this.cardMin.getInformacion());
			entidadRol.setCardinalidadMax(this.cardMax.getInformacion());
			
			return entidadRol;
		}
		catch(NingunElementoSeleccionadoException excep)
		{
			throw new NingunElementoSeleccionadoException("No se seleccionó ninguna Entidad.");
		}
	}
		
	/* para dibujar */
	@Override
	protected void agregarComponentesPanelInformacion()
	{
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{1, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		getPanelDeInformacion().setLayout(gridBagLayout);
		
		agregarEntidad();		
		agregarRol();
		agregarCardMin();
		agregarCardMax();

	}

	private void agregarCardMax()
	{
		cardMax = new PanelParLabelText("Cardinalidad Maxima");
		cardMax.setInformacion("1");
		
		GridBagConstraints gbc_cardMax = new GridBagConstraints();
		gbc_cardMax.fill = GridBagConstraints.BOTH;
		gbc_cardMax.insets = new Insets(ConstantesVista.PANEL_INFORMACION_MARGEN_VERTICAL, 0, ConstantesVista.PANEL_INFORMACION_MARGEN_VERTICAL, 0);
		gbc_cardMax.gridx = 0;
		gbc_cardMax.gridy = 3;
		
		this.getPanelDeInformacion().add(cardMax, gbc_cardMax);
	}

	private void agregarCardMin() 
	{
		cardMin = new PanelParLabelText("Cardinalidad Minima");
		cardMin.setInformacion("1");

		GridBagConstraints gbc_cardMin = new GridBagConstraints();
		gbc_cardMin.insets = new Insets(ConstantesVista.PANEL_INFORMACION_MARGEN_VERTICAL, 0, 0, 0);
		gbc_cardMin.fill = GridBagConstraints.BOTH;
		gbc_cardMin.gridx = 0;
		gbc_cardMin.gridy = 2;
		
		this.getPanelDeInformacion().add(cardMin, gbc_cardMin);
	}

	private void agregarRol()
	{
		rol = new PanelParLabelText("Rol");
		
		GridBagConstraints gbc_rol = new GridBagConstraints();
		gbc_rol.insets = new Insets(ConstantesVista.PANEL_INFORMACION_MARGEN_VERTICAL, 0, 0, 0);
		gbc_rol.fill = GridBagConstraints.BOTH;
		gbc_rol.gridx = 0;
		gbc_rol.gridy = 1;
		
		this.getPanelDeInformacion().add(rol, gbc_rol);
	}

	private void agregarEntidad()
	{
		entidades = new PanelParLabelCombo("Entidad");
		
		GridBagConstraints gbc_entidades = new GridBagConstraints();
		gbc_entidades.insets = new Insets(ConstantesVista.PANEL_INFORMACION_MARGEN_VERTICAL, 0, 0, 0);
		gbc_entidades.fill = GridBagConstraints.BOTH;
		gbc_entidades.gridx = 0;
		gbc_entidades.gridy = 0;
		
		this.getPanelDeInformacion().add(entidades, gbc_entidades);
	}
	
}
